const Mock = require('mockjs')
const { deepClone } = require('../utils')
const { asyncRoutes, constantRoutes } = require('./routes.js')
/*
* 这段代码定义了一个名为routes的常量，使用了ES6中的扩展运算符和深拷贝（deepClone）函数，将常量constantRoutes和asyncRoutes合并成一个新数组，
* 并通过深拷贝创建了这个新数组的副本，最终赋值给routes常量。这里的目的是将所有的路由定义合并成一个数组，以便后续进行路由权限控制。*/
const routes = deepClone([...constantRoutes, ...asyncRoutes])
/*
* 这段代码定义了三种角色dgfsfgxc（admin、editor和visitor），以及他们各自的权限。每个角色都有一个关键字（key）、名称（name）、描述（description）
* 和可以访问的路由（routes）。其中admin可以访问所有页面，editor不能访问权限页面，visitor只能访问首页和文档页面。这些路由数据是之前定义在routes.js文件中的。*/
const roles = [
  {
    key: 'admin',
    name: 'admin',
    description: 'Super Administrator. Have access to view all pages.',
    routes: routes
  },
  {
    key: 'superUser',
    name: 'superUser',
    description: 'Super Administrator. Have access to view all pages.',
    routes: routes
  },
  {
    key: 'firmUser',
    name: 'firmUser',
    routes: routes
  },
  {
    key: 'farmUse',
    name: 'farmUse',
    routes: routes
  },
  {
    key: 'transportUser',
    name: 'transportUser',
    routes: routes
  },
  {
    key: 'editor',
    name: 'editor',
    description: 'Normal Editor. Can see all pages except permission page',
    /*
    * 这段代码中的filter()函数过滤掉了routes数组中路径为'/permission'的路由，也就是editor角色不能访问的权限页面。
    * 这里使用了箭头函数，将数组中路径为'/permission'的路由过滤掉，返回一个新数组给editor角色使用。值得注意的是，这里的注释“just a mock”表示这段代码只是一个模拟，
    * 实际使用时需要根据具体情况修改。*/
    routes: routes.filter(i => i.path !== '/permission')// just a mock
  },
  {
    key: 'visitor',
    name: 'visitor',
    description: 'Just a visitor. Can only see the home page and the document page',
    routes: [{
      path: '',
      redirect: 'dashboard',
      children: [
        {
          path: 'dashboard',
          name: 'Dashboard',
          meta: { title: 'dashboard', icon: 'dashboard' }
        }
      ]
    }]
  }
]

/*
* 这段代码导出了一个数组，数组中包含了多个对象，每个对象描述了一个接口的 URL、请求类型和响应数据。这个数组被用于在开发环境中模拟后端接口的响应，方便前端开发人员进行调试和测试。

接口列表如下：

/vue-element-admin/routes: 获取所有路由配置的接口，请求类型为 GET，响应数据包含了一个 code 和 data 属性，其中 code 表示响应状态码，data 表示路由配置数据。

/vue-element-admin/roles: 获取所有角色的接口，请求类型为 GET，响应数据包含了一个 code 和 data 属性，其中 code 表示响应状态码，data 表示角色数据。

/vue-element-admin/role: 添加角色的接口，请求类型为 POST，响应数据包含了一个 code 和 data 属性，其中 code 表示响应状态码，data 表示添加角色后生成的 key 值。

/vue-element-admin/role/[A-Za-z0-9]: 更新角色和删除角色的接口，请求类型分别为 PUT 和 DELETE，响应数据包含了一个 code 和 data 属性，其中 code 表示响应状态码，data 表示操作成功的状态。

总之，这段代码定义了多个接口用于模拟后端接口的响应，方便前端开发人员进行调试和测试。*/
module.exports = [
  // mock get all routes form server

  {
    url: '/vue-element-admin/routes',
    type: 'get',
    response: _ => {
      return {
        code: 20000,
        data: routes
      }
    }
  },

  // mock get all roles form server
  {
    url: '/vue-element-admin/roles',
    type: 'get',
    response: _ => {
      return {
        code: 20000,
        data: roles
      }
    }
  },

  // add role
  {
    url: '/vue-element-admin/role',
    type: 'post',
    response: {
      code: 20000,
      data: {
        key: Mock.mock('@integer(300, 5000)')
      }
    }
  },

  // update role
  {
    url: '/vue-element-admin/role/[A-Za-z0-9]',
    type: 'put',
    response: {
      code: 20000,
      data: {
        status: 'success'
      }
    }
  },

  // delete role
  {
    url: '/vue-element-admin/role/[A-Za-z0-9]',
    type: 'delete',
    response: {
      code: 20000,
      data: {
        status: 'success'
      }
    }
  }
]
